package cn.bookcycle.panda.pay.util;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.bookcycle.panda.pay.constant.BusinessData;
import cn.bookcycle.panda.pay.constant.NameData;

/**
 * 将数据持久化存储的业务工具类
 *
 * @author liufenglin
 * @date 2018年3月3日
 */
public class DaoUtil {
	/** 日志 */
	private static final Logger logger = LoggerFactory.getLogger(DaoUtil.class);
	/**
	 * 记录微服务收到的所有请求参数
	 * 
	 * @param map 由请求微信接口的necessaryParametersMap和alternativeParametersMap组成的map
	 */
	public static void logParameters(Map parametersMap) {
		Map<String, Object> map = new HashMap();
		map.put(NameData.NECESSARY_PARAMETERS, parametersMap.get(NameData.NECESSARY_PARAMETERS));
		// 在map中添加数据库名、表名、方法参数
		map.put(NameData.DB_NAME, NameData.PAY_SERVICE_DB);
		map.put(NameData.TAB_NAME, NameData.LOG_PARAMETERS_TAB);
		map.put(NameData.METHOD, NameData.INSERT);
		// map转json
		JSONObject jsonObject = new JSONObject(map);
		String jsonStr = jsonObject.toString();
		logger.info("发送数据库微服务请求的参数json：{}", jsonStr);
		// 调用数据库微服务
		String result = DBUtil.sendPost(BusinessData.DB_URI, "data", jsonStr, "UTF-8");
		logger.info("调用数据库微服务返回的结果：{}", result);
	}
	
	
	public static String getNotifyUrl(String account, String tradeNo) throws JSONException {
		// 创建用于查询的json
		JSONObject jsonObject = new JSONObject();
		// 存放method、dbName、tabName
		jsonObject.put(NameData.METHOD, NameData.FIND);
		jsonObject.put(NameData.DB_NAME, NameData.PAY_SERVICE_DB);
		jsonObject.put(NameData.TAB_NAME, NameData.LOG_PARAMETERS_TAB);
		// 把account、tradeNo先放到一个subJsonObject中,再放到jsonObject中
		JSONObject subJsonObject = new JSONObject();
//		subJsonObject.put(BusinessData.NECESSARY_PARAMETERS_MAP.get(NameData.MCH_ID), mchId);
		subJsonObject.put(BusinessData.NECESSARY_PARAMETERS_MAP.get(NameData.TRADE_NO), tradeNo);
		jsonObject.put(NameData.RECORD, subJsonObject);
		// 创建用于查询的json串
		String json = jsonObject.toString();
		logger.info("查询条件json：{}", json);
		// 调用数据库微服务获取返回的notifyUrl
		String returnJson = DBUtil.sendPost(BusinessData.DB_URI, NameData.DATA, json, NameData.UTF8);
		logger.warn("从数据库查询到的回调地址:{}", returnJson);
		// 解析returnJson
		JSONArray jsonArray = new JSONArray(returnJson);
		// 如果有多个返回值的话，就获取第一个值
		jsonObject = jsonArray.getJSONObject(0);
		String notifyUrl = jsonObject.getString(BusinessData.NECESSARY_PARAMETERS_MAP.get(NameData.NOTIFY_URL));
		return notifyUrl;
	}
}
